package com.opensource.component.query.repository;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.opensource.component.query.wrapper.LambdaExtendWrapper;
import java.util.List;

/**
 * @author ZL since on 2021/12/18 下午9:29
 */
public interface ExtendRepository<T> extends IService<T> {


  /**
   * 查询列表
   *
   * @param wrapper 实体对象封装操作类
   * @return 返回E 类型的列表
   */
  <EV> List<EV> loadExtendList(LambdaExtendWrapper<T> wrapper, Class<EV> clz);

  /**
   * 查询单个对象
   *
   * @param wrapper 实体对象封装操作类
   * @param clz     返回对象 （如果只查询一个字段可以传递String Int之类的类型）
   * @param <EV>    返回类型泛型
   * @return EV
   */
  <EV> EV loadExtendOne(LambdaExtendWrapper<T> wrapper, Class<EV> clz);


  /**
   * 查询count
   *
   * @param wrapper 实体对象封装操作类
   * @return 总数
   */
   long loadExtendCount(LambdaExtendWrapper<T> wrapper);


  /**
   * 翻页查询
   *
   * @param page    翻页对象
   * @param wrapper 实体对象封装操作类
   */
  <EV> IPage<EV> loadExtendPage(IPage<T> page, LambdaExtendWrapper<T> wrapper,
      Class<EV> clz);

}
